エラーの 4 分類
Swift の 「Error Handling Rationale and Proposal」 で説明されるエラーの 4 分類
4 分類
Simple domain errors : 明白な事前条件があるがそれが満たされない場合のエラー
数字じゃない文字列に対する String.toInt() 呼び出しなど
呼び出し側は、事前条件を満たしているかどうかをメソッド呼び出しで確認できる
値を Optional で返すことで、事前条件を満たしていない場合は nil にする、というような API 設計ができる
Recoverable errors : ファイルが見つからなかったりネットワークのタイムアウトなど
「Error Handling Rationale and Proposal」 における提案の焦点
Universal errors : 普遍的に発生しうるエラー
SIGINT や別スレッドからのスレッドのキャンセルといった非同期条件や、メモリ不足やスタックオーバーフローといった遍在するエラー
抽象化により発生することもある (コレクションのサイズ取得やプロパティ読み出しは通常エラーにならないが、例えば DB 接続する実装を抽象化していた場合はエラーになりうる)
普遍的なので、伝搬は自動的でなければならず、実装はゼロコスト (zero-cost) か可能な限りそれに近づけるべき
あらゆる場所でのエラーハンドリングをしようとするとコストがバカ高くなるので
そのため、Swift の API では一般的に Objective-C 例外により実装される
Logic failures : プログラマのミスであり、コードを修正する必要があるもの
境界を超えた配列アクセスや nil オプショナルに対する強制アンラップなど